import {
  WPS_Enum,
  constEtEnum,
  Enum996CodeOfficeFlag,
  EnumDocSaveFlag,
  EnumDocLandMode,
  EtXlFixedFormatType, EtXlFixedFormatQuality
} from "./enum.js"

import {
  setPluginStorageItem,
  getPluginStorageItem,
  UploadFile,
  getOriginURL,
  GetDocParamsValue,
  pRemoveDocParam,
  getDocSavePath,
  pGetValidDocTempPath,
} from "../common/common";

import {

  pCheckIs996CodeOffice,
  pISOADocReadOnly, pIsOnlineOADoc, saveEtToServer, savePdfoServer,

} from "./etCommon.js"

import { CACHE_KEY, useCache ,getNicknameWithUsername} from '@/hooks/web/useCache'
import {
  OnWindowActivate,
  OnWorkbookBeforeClose, OnDocumentAfterClose,
  OnWorkbookBeforePrint, OnWorkbookOpen, OnNewWorkbook, OnWorkbookBeforeSave
} from './etEventFunction'


//初始化全局参数
export function pInitParameters() {
    //在OA助手加载前，先保存用户原有的WPS应用用户名称
    let l_wpsUserName = wps.EtApplication().UserName;
    setPluginStorageItem(constEtEnum.WPSInitUserName, l_wpsUserName);

    //设置新打开文档是否默认显示加载项  默认为false
    setPluginStorageItem(constEtEnum.Show996CodeTabDocActive, false);

    //弹出上传成功后的提示信息
    // wps.PluginStorage.setItem(constStrEnum.Save2OAShowConfirm, true);

    //按钮的标记控制
    // wps.PluginStorage.setItem(constStrEnum.RevisionEnableFlag, false)

    // 初始化默认禁止保存
    setPluginStorageItem(constEtEnum.OADocUserSave, EnumDocSaveFlag.NoneOADocSave);

    //设置是否允许来自OA的文件再次被打开
    setPluginStorageItem(constEtEnum.AllowOADocReOpen, false);

}

//挂载WPS的文档事件
export function AddDocumentEvent() {
    wps.ApiEvent.AddApiEventListener("WindowActivate", OnWindowActivate);
    wps.ApiEvent.AddApiEventListener("WorkbookBeforeSave", OnWorkbookBeforeSave);
    wps.ApiEvent.AddApiEventListener("WorkbookBeforeClose", OnWorkbookBeforeClose);
    // ET 不支持
    // wps.ApiEvent.AddApiEventListener("DocumentAfterClose", OnDocumentAfterClose);
    wps.ApiEvent.AddApiEventListener("WorkbookBeforePrint", OnWorkbookBeforePrint);
    wps.ApiEvent.AddApiEventListener("WorkbookOpen", OnWorkbookOpen);
    wps.ApiEvent.AddApiEventListener("NewWorkbook", OnNewWorkbook);
}




export function pGet996CodeDocLabel() {
  var l_Doc = wps.EtApplication().ActiveWorkbook;
  if (!l_Doc) {
    return "";
  }

  var l_strLabel = ""; //初始化

  if (pIsOnlineOADoc(l_Doc) == true) { // 判断是否为不落地文档
    l_strLabel = "不落地";
  } else {
    l_strLabel = l_Doc.Path != "" ? "落地" : "未保存";
  }

  //判断OA文档是否是受保护
  if (pISOADocReadOnly(l_Doc) == true) {
    l_strLabel = l_strLabel + "(保护)";
  }
  return l_strLabel;
}
export function pSetUserNameLabelControl() {

  return getNicknameWithUsername();
}





/**
 * 获取对象中指定属性的值
 * @param {*} params
 * @param {*} Key
 */
export function GetParamsValue(Params, Key) {
    if (typeof(Params) == "undefined") {
        return "";
    }

  let l_rtnValue = Params[Key];
    return l_rtnValue;
}


export async function saveToServer() {
  let l_doc = wps.EtApplication().ActiveWorkbook;
  if (!l_doc) {
    alert("空文档不能保存！");
    return;
  }

  //非OA文档，不能上传到OA
  if (pCheckIs996CodeOffice() == false) {
    alert("非系统打开的文档，不能直接上传到系统！");
    return;
  }


  //如果是OA打开的文档，并且设置了保护的文档，则不能再上传到OA服务器
  if (pISOADocReadOnly(l_doc)) {
    alert("系统设置了保护的文档，不能再提交到系统后台。");
    return;
  }


  //如果是OA打开的文档，禁止修改
  if (pIsOnlineOADoc(l_doc) == true) {
    alert("在线文档，禁止修改！");
    return;
  }

  /**
   * 参数定义：OAAsist.UploadFile(name, path, url, field,  "OnSuccess", "OnFail")
   * 上传一个文件到远程服务器。
   * name：为上传后的文件名称；
   * path：是文件绝对路径；
   * url：为上传地址；
   * field：为请求中name的值；
   * 最后两个参数为回调函数名称；
   */

  // var l_showConfirm = wps.PluginStorage.getItem(constStrEnum.Save2OAShowConfirm)
  let l_showConfirm = GetDocParamsValue(l_doc,constEtEnum.Save2OAShowConfirm);
  if (l_showConfirm) {
    if (!wps.confirm("先保存文档，并开始上传到系统后台，请确认？")) {
      return;
    }
  }

  let conformStr = null ;
  if(l_showConfirm){
    conformStr = "文件上传成功！继续编辑请确认，取消关闭文档。" ;
  }
  let saveEtToServerRes = await saveEtToServer(l_doc);

  if(saveEtToServerRes.code !== 0){
    alert(saveEtToServerRes.msg)
    return;
  }

  if (wps.confirm(conformStr) == false) {
    if (l_doc) {
      l_doc.Close(-1); //保存文档后关闭
    }
  }

  //判断是否同时上传PDF等格式到OA后台
  var l_uploadWithAppendPath = GetDocParamsValue(l_doc, constEtEnum.uploadWithAppendPath); //标识是否同时上传OFD、PDF等格式的文件
  if (l_uploadWithAppendPath == "1") {
    // todo yinjt  调用转 pdf格式函数，强制关闭转换修订痕迹，不弹出用户确认的对话框
    // pDoChangeToOtherDocFormat(l_doc, ".pdf", false, false); //
  }
  return;

}


/**
 *  执行另存为本地文件操作
 */
export function OnBtnSaveAsLocalFile() {

  //初始化临时状态值
  setPluginStorageItem(constEtEnum.OADocUserSave, false);

  //检测是否有文档正在处理
  let l_doc = wps.EtApplication().ActiveWorkbook;
  if (!l_doc) {
    alert("WPS当前没有可操作文档！");
    return;
  }

  // 设置WPS文档对话框 2 FileDialogType:=msoFileDialogSaveAs
  let l_ksoFileDialog = wps.EtApplication().FileDialog(2);
  l_ksoFileDialog.InitialFileName = l_doc.Name; //文档名称

  if (l_ksoFileDialog.Show() == -1) { // -1 代表确认按钮
    setPluginStorageItem(constEtEnum.OADocUserSave, true); //设置保存为临时状态，在Save事件中避免OA禁止另存为对话框
    l_ksoFileDialog.Execute(); //会触发保存文档的监听函数

    pRemoveDocParam(l_doc)

    wps.ribbonUI.Invalidate(); //刷新Ribbon的状态

  };
}


/**
 * 作用： 把当前文档保存为其他格式的文档并上传
 * @param {*} p_FileSuffix 输出的目标格式后缀名，支持：.pdf .uof .uot .ofd
 * @param {*} pShowPrompt 是否弹出用户确认框
 */
export function OnDoChangeToOtherDocFormat(p_FileSuffix, pShowPrompt) {
  let l_suffix = p_FileSuffix; // params.suffix;
  if (!l_suffix) {
    return;
  }
  //获取当前执行格式转换操作的文档
  let l_doc = wps.EtApplication().ActiveWorkbook;
  if (!l_doc) {
    return;
  }
  if (typeof(pShowPrompt) == "undefined") {
    pShowPrompt = true; //默认设置为弹出用户确认框
  }
  //默认设置为以当前文件的显示模式输出，即当前为修订则输出带有修订痕迹的
  pDoChangeToOtherDocFormat(l_doc, l_suffix, pShowPrompt);
}

export function createTaskPane(urlPath) {
  let tsId = getPluginStorageItem('taskpane_id')
  let tskpane = null;
  if(tsId != undefined){
    tskpane = window.Application.GetTaskPane(tsId)
    tskpane.Navigate(getOriginURL(urlPath))
  }
  else {
    tskpane = window.Application.CreateTaskPane(getOriginURL(urlPath))
    let id = tskpane.ID
    setPluginStorageItem('taskpane_id', id)
  }

  tskpane.DockPosition = WPS_Enum.msoCTPDockPositionRight  //这里可以设置taskapne是在左边还是右边
  tskpane.Width = 300
  tskpane.Visible = true

}



/**
 * wps内弹出web页面
 * @param {*} html 文件名
 * @param {*} title 窗口标题
 * @param {*} hight 窗口高
 * @param {*} width 窗口宽
 */
export function OnShowDialog(html, title, height, width, bModal) {
  var l_ActiveDoc = wps.EtApplication().ActiveWorkbook;
  if (!l_ActiveDoc) {
    alert("WPS当前没有可操作文档！")
    return;
  }
  if (typeof bModal == "undefined" || bModal == null) {
    bModal = true;
  }
  width *= window.devicePixelRatio;
  height *= window.devicePixelRatio;
  var url = getOriginURL(html);
  wps.ShowDialog(url, title, height, width, bModal);
}



/**
 * 作用：把当前文档输出为另外的格式保存
 * @param {*} p_Doc 文档对象
 * @param {*} p_Suffix 另存为的目标文件格式
 * @param {*} pShowPrompt 是否弹出用户确认框
 */
async function pDoChangeToOtherDocFormat(p_Doc, p_Suffix, pShowPrompt) {
  if (!p_Doc) {
    return;
  }

  let l_suffix = p_Suffix;

  if (pShowPrompt == true) {
    if (!wps.confirm("当前文档将另存一份" + l_suffix + " 格式的副本，并上传到系统后台，请确认 ？")) {
      return;
    }
  }

  let savePdfoServerRes = await savePdfoServer(p_Doc);
  if (savePdfoServerRes.code !== 0) {
    alert(savePdfoServerRes.msg)
  }else {
    alert("文件转格式保存成功！");
  }

  return;
}


